﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace SMS
{
    public partial class uImportXe : UserControl
    {
        public readonly long RowsCopied;
        private bool hople = true;

       fLogin main;
        public uImportXe(fLogin main1)
        {
            InitializeComponent();
            main = main1;
        }

        //DataTable List;
        //DBAccess db;
        //DataRow rd;
        DataTable dtbEmailList;

        long totalRowsCount = 0;
        public delegate void RowCopiedHandle(object obj, uImportXe arg);
        public event RowCopiedHandle OnRowCopied;


        public DataTable ImportEmailList(string FileName, bool hasHeaders)
        {
            //Cho biết trong tập tin Excel có tiêu đề ở mỗi cột hay không
            string HDR = hasHeaders ? "Yes" : "No";
            //Chuỗi kết nối để mở và đọc dữ liệu từ tập tin EXCEL 2003 (yêu cầu máy cài Office 2003)
            string strConn = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX=1\"", FileName, HDR);
            //Chuỗi kết nối để mở và đọc dữ liệu từ tập tin EXCEL 2007 (yêu cầu máy cài Office 2007 trở lên)
            //string strConn = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR={1};IMEX=1\"", FileName, HDR);

            //DataTable chứa kết quả đọc được
            DataTable outputTable = new DataTable("XEMAY");

            using (OleDbConnection conn = new OleDbConnection(strConn))
            {
                conn.Open();

                //Lấy thông tin các sheet có trong tập tin EXCEL
                DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                //Lấy tên Sheet đầu tiên
                string sheet = dt.Rows[0]["TABLE_NAME"].ToString();
                //Khai báo câu query để đọc nội dung của sheet đầu tiên 
                //(có thể đưa trực tiếp tên sheet vào đây,không cần bước lấy tên sheet ở trên
                OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn);
                cmd.CommandType = CommandType.Text;

                //Thực hiện đọc và lưu dữ liệu vào DataTable
                new OleDbDataAdapter(cmd).Fill(outputTable);
            }
            return outputTable;
        }

        public bool SaveEmailList(DataTable dtb)
        {
            if (dtb == null)
                return false;

            foreach (DataRow dr in dtb.Rows)
            {
                InsertMail(dr);
            }
            //???
            return true;
        }
        public bool InsertMail(DataRow dr)
        {

            int count = 0;
            
            //Khai báo đối tượng dùng kết nối CSDL
            SqlConnection conn = new SqlConnection(main.ConnectDB);
            //Dùng xoá dữ liệu đang có trong bảng Email của SQL Database
          

            SqlCommand command1 = new SqlCommand("SP_IMPORTMAUXE", conn);
            command1.CommandType = CommandType.StoredProcedure;
            command1.Connection = conn;

            SqlCommand command2 = new SqlCommand("SP_IMPORTLOAIXE", conn);
            command2.CommandType = CommandType.StoredProcedure;
            command2.Connection = conn;

            SqlCommand command = new SqlCommand();
            command.Connection = conn;


            SqlCommand command3 = new SqlCommand();
            command3.Connection = conn;


            //SqlConnection conn = new SqlConnection(main.ConnectDB);
            //SqlCommand command = new SqlCommand("SP_LUUNHATKI", conn);
            //command.CommandType = CommandType.StoredProcedure;
            //command.Connection = conn;

            //command.Parameters.Add(new SqlParameter("@NOIDUNG", "L?n 1"));

        //    command.CommandText = "INSERT INTO KHACHHANG(HOTEN,BIDANH,GIOITINH,DIACHI,NGAYSINH,NAMSINH,THANGSINH,DTDIDONG,DTNHA,TINHTP,QUANHUYEN,NGHENHIEP,CMND,TINHTRANG) VALUES (@Ten,@Bidanh,@Gioitinh,@Dchi,@Ngaysinh,@Namsinh,@Thangsinh,@DTDD,@DTNha,@Tinhtp,@Quanhuyen,@NgheNghiep,@CMND,@TINHTRANG)";
             command.CommandText = "INSERT INTO XEMAY(SOKHUNG,SOBH,SOMAY,TINHTRANGBD, TINHTRANGGUITIN) VALUES (@SoKhung,@SoBH,@SoMay,0,0)";
             command3.CommandText = "INSERT INTO CTXEMAY(SOKHUNG,MAMAUXE,MAQTLOAIXE,GIA) VALUES (@SoKhung,@MaMau,@MaLoai,@Gia)";
        
          

            // command.CommandText = "INSERT INTO CTXEMAY(SOKHUNG,GIA) VALUES (@SoKhung,@Gia)";
            //command.CommandText = "SP_THEMKHACHHANG (@Ten,@Gioitinh,@Dchi,@Ngaysinh,@Namsinh,@Thangsinh,@DTDD,@DTNha,@Tinhtp,@Quanhuyen,@NgheNghiep,@CMND,@TINHTRANG)";




            command.Parameters.Add(new SqlParameter("@SoKhung",dr[0].ToString()));
            command.Parameters.Add(new SqlParameter("@SoBH", dr[1].ToString()));
            command.Parameters.Add(new SqlParameter("@SoMay", dr[2].ToString()));

            command1.Parameters.Add(new SqlParameter("@TENMAUXE", dr[5].ToString()));
            command1.Parameters.Add(new SqlParameter("@MAMAUXE", dr[4].ToString()));

            command2.Parameters.Add(new SqlParameter("@TENLOAIXE", dr[7].ToString()));
            command2.Parameters.Add(new SqlParameter("@MAQTLOAIXE", dr[6].ToString()));

            command3.Parameters.Add(new SqlParameter("@SoKhung", dr[0].ToString()));
            command3.Parameters.Add(new SqlParameter("@Gia", dr[3].ToString()));
            command3.Parameters.Add(new SqlParameter("@MaMau", dr[4].ToString()));           
            command3.Parameters.Add(new SqlParameter("@MaLoai", dr[6].ToString()));






            try
            {
                //Mở kết nối
                conn.Open();
                //Thực thi việc thêm dữ liệu. kết quả trả về biến count là số dòng dữ liệu được thêm 
                // (trong trường hợp này, nếu thành công thì có 1 dòng dữ liệu được thêm vào Database)
                count = command.ExecuteNonQuery();
                command1.ExecuteNonQuery();
                command2.ExecuteNonQuery();
                command3.ExecuteNonQuery();
                //MessageBox.Show("Lưu Thành Công");
                //MessageBox.Show("Thanh cong");

                hople = true;
            }
            catch (SqlException ex)
            {
                hople = false;
                MessageBox.Show("Dữ liệu chưa được lưu ! Ban xem lại dữ liệu trong bảng Excel đã hợp lệ chưa ? ");

            }
            finally
            {
                conn.Close();
            }

            if (count >= 1)
            {
                return true;
                //MessageBox.Show("Thanh cong");
            }

            else
                return false;
            // return true;
        }


        private void bntSave_Click(object sender, EventArgs e)
        {
            
            backgroundWorker1.RunWorkerAsync();
            dataGridView1.DataSource = null;
            bntSave.Enabled = false;
          
            //MessageBox.Show("thanh cong");
           // main.Danhsachkhachhang.uDanhsachkhachhang_Load(null, null);
        }

       
      
    
        private void bntHuy_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = null;
        }

        private void bntChonFile_Click(object sender, EventArgs e)
        {
            bntSave.Enabled = true;
            string fileName;
            DialogResult result = openFileDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                fileName = openFileDialog1.FileName;
                txtImport.Text = fileName;
                dtbEmailList = ImportEmailList(fileName, true);
                if (dtbEmailList != null)
                {
                    dataGridView1.DataSource = dtbEmailList;
                }
            } 
          
        }

        private void backgroundWorker1_DoWork_1(object sender, DoWorkEventArgs e)
        {
            SaveEmailList(dtbEmailList);
        }

        private void uImportXe_Load(object sender, EventArgs e)
        {

        }
        

    }
}
